package com.xijia;

import java.io.Serializable;

/**
 * 单例模式（懒汉式）
 * @author wangsong
 * @mail 1720696548@qq.com
 * @date 2020/9/5 0005 9:49 
 * @version 1.0.0
 */
public class Singleton01 implements Serializable {

    private static Singleton01 singleton01 = null;

    /**
     * 私有化，禁止new 改对象
     */
    private Singleton01() {
    }

    /**
     * 此创建方法  缺陷: 如果两个线程同时进入该 getInstance()方法，会破坏数据初始化的数据
     * 如果： singleton01为计数器或火车票
     * ----a执行 初始化 singleton01 = 1
     * ----b执行 初始化 singleton01 = 1
     * 实际结果应该为2，但实际结果为1 ,有兴趣可自行模拟
     * @return
     */
    public static Singleton01 getInstance() {
        if (singleton01 == null) {
            singleton01 = new Singleton01();
        }
        return singleton01;
    }

    public static void main(String[] args) {
        // 初始化
        Singleton01 instance1 = Singleton01.getInstance();
        // 直接获取，不初始化, 但是遇到instance1和instance2 的调用同时进入if 条件，部分业务数据将不正确(如计数器，火车票等)
        Singleton01 instance2 = Singleton01.getInstance();
        System.out.println(instance1 == instance2);
    }

}
